SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE FUNCTION [dbo].[FU_CONV_MONE]        
/*------------------------------------------------------*/          
/*---- Empresa           : OFISIS S.A.              ----*/          
/*---- Cliente           : OFISIS S.A.              ----*/          
/*---- Nombre FU         : FU_CONV_MONE             ----*/          
/*---- Desarrollado por  : OFISIS                   ----*/          
/*---- Fecha Creaci>n    : 13/01/2005               ----*/          
/*---- Base de Datos     : SLQ Server               ----*/          
/*---- Versi>n           : 8.0                      ----*/          
/*------------------------------------------------------*/          
/*---- MODIFICADO POR    : PDGV                     ----*/    
/*---- FECHA MODIF       : 14/01/2005               ----*/    
/*---- DETALLE MODIF     : SE ADECUO PROC DE CONV   ----*/    
/*---- PARA REPORTE DE INV. Y BALANCES DETALLADO    ----*/    
/*------------------------------------------------------*/          
/*--- Drop PROCEDURE FU_CONV_MONE                   ----*/        
/*--- Grant All on FU_CONV_MONE To Public           ----*/        
/*--- FU_CONV_MONE '01','LIB',1,'PAC','COM',0.64,'2002/11/15',00000,0 ONV OUTPUT---*/        
/*--- FU_CONV_MONE '01','SOL',1,'PAC','COM',1,'2003/02/07',1500,0  ONV OUTPUT---*/        
/*------------------------------------------------------*/          
  (---@ISCO_EMPR            TD_VC_002,        
  @ISCO_MONE_ORIG TD_VC_003,        
  @ISCO_MONE_DEST       TD_VC_003,        
  @ISTI_CAMB         TD_VC_003,        
  @INFA_CAMB            TD_NU_015_006,         
  @INIM_ORIG   TD_NU_016_004,        
  @INNU_ANNO            TD_IN_001,        
  @INNU_MESE            TD_IN_002_MESE)        
--- @ISTI_ORIG            TD_VC_001, -- Invocado por (A)pt o (P)rocedure        
  ---@ONIM_CONV            TD_NU_016_004 OUTPUT          
        
  RETURNS NUMERIC(16,4)          
        
AS        
Begin        
  Declare        
  @VSCO_MON1       TD_VC_003,        
  @VSCO_MONE_BAS1  TD_VC_003,        
  @VSTI_OPE1       TD_VC_001,        
  @VSCO_MON2       TD_VC_003,        
  @VSCO_MONE_BAS2  TD_VC_003,        
  @VSTI_OPE2       TD_VC_001,        
  @VNFA_CAMB_0002  TD_NU_015_006,        
  @VNIM_CONV       TD_NU_016_004        
        
  ---- Verificamos si ambas monenas son iguales        
  If @ISCO_MONE_ORIG !=  @ISCO_MONE_DEST        
  Begin        
    ----  Recupero monedas        
    Select @VSCO_MON1 = CO_MON1,        
    @VSCO_MONE_BAS1 = CO_MONE_BAS1,        
           @VSTI_OPE1 = TI_OPE1,        
    @VSCO_MON2 = CO_MON2,        
           @VSCO_MONE_BAS2 = CO_MONE_BAS2,        
    @VSTI_OPE2 = TI_OPE2        
    From   TMCONV_MONE         
    Where  CO_MONE_ORIG   = @ISCO_MONE_ORIG        
    And    CO_MONE_DEST   = @ISCO_MONE_DEST         
        
    ---- Solo convierte para Paso 1        
    If IsNull(Rtrim(@VSCO_MON2), '') = '' And @INIM_ORIG <> 0 and @INFA_CAMB > 0        
    Begin        
      If @VSTI_OPE1 = 'M'        
        Select @VNIM_CONV  =  Round(@INIM_ORIG * @INFA_CAMB, 2)        
      Else        
        Select @VNIM_CONV  =  Round(@INIM_ORIG / @INFA_CAMB, 2)        
    End        
        
    ---- Convierte cuando tiene Paso 1 y Paso 2        
    If IsNull(Rtrim(@VSCO_MON1), '') != '' and IsNull(Rtrim(@VSCO_MON2), '') != '' and @INIM_ORIG <> 0 and @INFA_CAMB > 0         
    Begin        
              
      If @VSTI_OPE1 = 'M'        
        Select @VNIM_CONV  =  Round(@INIM_ORIG * @INFA_CAMB, 2)        
      Else        
        Select @VNIM_CONV  =  Round(@INIM_ORIG / @INFA_CAMB, 2)        
        
      Select @VNFA_CAMB_0002 =         
           Case  @ISTI_CAMB        
             When  'COM' Then FA_CAMB_CMPR        
             Else   FA_CAMB_VNTA        
    End         
      From    TCFACT_CIER        
      Where   CO_MONE = @VSCO_MON2        
      And     NU_ANNO = @INNU_ANNO        
      And     NU_MESE = @INNU_MESE        
        
      If IsNull(@VNFA_CAMB_0002,0) > 0        
      Begin        
        If @VSTI_OPE2 = 'M'        
   Select @VNIM_CONV  =  Round(@VNIM_CONV * @VNFA_CAMB_0002, 2)        
        Else        
          Select @VNIM_CONV  =  Round(@VNIM_CONV / @VNFA_CAMB_0002, 2)        
      End         
      Else        
        Select @VNIM_CONV = 0        
      End        
    ---- Si importe original es 0        
    If @INIM_ORIG = 0        
      Select @VNIM_CONV = 0        
    End        
  
  If @ISCO_MONE_ORIG =  @ISCO_MONE_DEST        
     Select @VNIM_CONV  =  Round(@INIM_ORIG, 2)        
  
Return @VNIM_CONV        
  
End  
/*----------------fin Funcion---------------------------*/

GO
